Nuotolinio darbo įtaka darbuotojų psichologinei gerovei
Hipotezė
Analizei buvo pasirinktas duomenų rinkinys „Remote Work & Mental Health“. Pagrindinė šio tyrimo hipotezė yra tokia: nuotolinis darbas turi neigiamą poveikį darbuotojų streso lygiui ir psichinei sveikatai. Taigi šios analizės tikslas yra įvertinti, ar nuotolinio darbo sąlygos daro neigiamą poveikį darbuotojų psichinei sveikatai ir bendram pasitenkinimui darbu.
Vertinimo kriterijai, pagal kuriuos matuosime hipotezės patvirtinimą ar paneigimą:
- Streso lygis: Bus tiriama, ar darbuotojai, dirbantys nuotoliniu būdu, patiria didesnį streso lygį nei dirbantys vietoje ar hibridiniu būdu.
- Socialinė izoliacija: Vertinsime, kiek nuotolinis darbas veikia socialinės izoliacijos jausmą ir kokį ryšį tai turi su darbuotojų pasitenkinimu.
- Psichinės sveikatos sutrikimai: Bus analizuojama, ar dirbant nuotoliniu būdu dažniau pasireiškia tokie sutrikimai kaip nerimas ar depresija.
- Pasitenkinimas darbu: Nustatysime, ar darbo sąlygos (nuotolinis, hibridinis, vietinis) lemia skirtumus pasitenkinimo darbu lygyje.
- Prieiga prie psichinės sveikatos išteklių: Bus tiriama, ar prieiga prie psichinės sveikatos pagalbos paslaugų turi reikšmingos įtakos nuotoliniu būdu dirbančių darbuotojų psichinei būklei.
Jeigu analizės metu bus nustatyta, kad nuotolinis darbas didina darbuotojų streso lygį, socialinę izoliaciją ir turi neigiamą įtaką psichinei sveikatai, hipotezė bus patvirtinta. Tačiau jei duomenys rodys, kad tam tikromis sąlygomis nuotolinis darbas neturi neigiamų pasekmių arba net turi teigiamą poveikį, pagrindinė hipotezė bus paneigta.
Duomenų paėmimas iš CSV
import pandas as pd
df = pd.read_csv('C:/Users/myamo/OneDrive/Desktop/Impact_of_Remote_Work_on_Mental_Health.csv')
Pradinis duomenų apdorojimas
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
Duomenų peržiūra
print(df.info())
<class 'pandas.core.frame.DataFrame'> RangeIndex: 5000 entries, 0 to 4999 Data columns (total 27 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Employee_ID 5000 non-null object 1 Age 5000 non-null int64 2 Gender 5000 non-null object 3 Job_Role 5000 non-null object 4 Industry 5000 non-null object 5 Years_of_Experience 5000 non-null int64 6 Hours_Worked_Per_Week 5000 non-null int64 7 Number_of_Virtual_Meetings 5000 non-null int64 8 Work_Life_Balance_Rating 5000 non-null int64 9 Stress_Level 5000 non-null object 10 Mental_Health_Condition 5000 non-null object 11 Productivity_Change 5000 non-null object 12 Social_Isolation_Rating 5000 non-null int64 13 Satisfaction_with_Remote_Work 5000 non-null object 14 Physical_Activity 5000 non-null object 15 Sleep_Quality 5000 non-null object 16 Region 5000 non-null object 17 Stress_Level_Numeric 5000 non-null int64 18 Mental_Health_Access 5000 non-null int64 19 Work_Location_Onsite 5000 non-null bool 20 Work_Location_Remote 5000 non-null bool 21 Access_to_Mental_Health_Resources_Yes 5000 non-null bool 22 Company_Support_for_Remote_Work_2 5000 non-null bool 23 Company_Support_for_Remote_Work_3 5000 non-null bool 24 Company_Support_for_Remote_Work_4 5000 non-null bool 25 Company_Support_for_Remote_Work_5 5000 non-null bool 26 Work_Location 5000 non-null object dtypes: bool(7), int64(8), object(12) memory usage: 815.6+ KB None
Tikriname trūkstamas reikšmes
#df = pd.read_csv('C:/Users/myamo/OneDrive/Desktop/Impact_of_Remote_Work_on_Mental_Health.csv')
print(df.isnull().sum())
Employee_ID 0 Age 0 Gender 0 Job_Role 0 Industry 0 Years_of_Experience 0 Work_Location 0 Hours_Worked_Per_Week 0 Number_of_Virtual_Meetings 0 Work_Life_Balance_Rating 0 Stress_Level 0 Mental_Health_Condition 1196 Access_to_Mental_Health_Resources 0 Productivity_Change 0 Social_Isolation_Rating 0 Satisfaction_with_Remote_Work 0 Company_Support_for_Remote_Work 0 Physical_Activity 1629 Sleep_Quality 0 Region 0 dtype: int64
Užpildome trūkstamas reikšmes
df.loc[df['Mental_Health_Condition'].isnull(), 'Mental_Health_Condition'] = 'Unknown'
df.loc[df['Physical_Activity'].isnull(), 'Physical_Activity'] = 'No Activity'
Patikriname trūkstamas reikšmes dar kartą
print(df.isnull().sum())
Employee_ID 0 Age 0 Gender 0 Job_Role 0 Industry 0 Years_of_Experience 0 Work_Location 0 Hours_Worked_Per_Week 0 Number_of_Virtual_Meetings 0 Work_Life_Balance_Rating 0 Stress_Level 0 Mental_Health_Condition 0 Access_to_Mental_Health_Resources 0 Productivity_Change 0 Social_Isolation_Rating 0 Satisfaction_with_Remote_Work 0 Company_Support_for_Remote_Work 0 Physical_Activity 0 Sleep_Quality 0 Region 0 dtype: int64
Naujų stulpelių kūrimas
stress_map = {'Low': 1, 'Medium': 2, 'High': 3}
df['Stress_Level_Numeric'] = df['Stress_Level'].map(stress_map)
Kuriame skaitinį atitikmenį prieigos prie psichinės sveikatos išteklių
#df['Mental_Health_Access'] = df['Access_to_Mental_Health_Resources'].map({'Yes': 1, 'No': 0})
cleaned_df['Mental_Health_Access'] = cleaned_df['Access_to_Mental_Health_Resources_Yes'].map({True: 1, False: 0})
print(cleaned_df[['Access_to_Mental_Health_Resources_Yes', 'Access_to_Mental_Health_Resources_No', 'Mental_Health_Access']].head())
Access_to_Mental_Health_Resources_Yes \ 0 False 1 False 2 False 3 True 4 True Access_to_Mental_Health_Resources_No Mental_Health_Access 0 True 0 1 True 0 2 True 0 3 False 1 4 False 1
Išsaugome paruoštus duomenis naujame faile
df.to_csv('naujas_remote_work_mental_health.csv', index=False)
Sukuriame DataFrame su apdorotais duomenimis
cleaned_df = pd.DataFrame(df)
Apdorotų duomenų peržiūra
cleaned_df.head()
Employee_ID | Age | Gender | Job_Role | Industry | Years_of_Experience | Work_Location | Hours_Worked_Per_Week | Number_of_Virtual_Meetings | Work_Life_Balance_Rating | ... | Access_to_Mental_Health_Resources | Productivity_Change | Social_Isolation_Rating | Satisfaction_with_Remote_Work | Company_Support_for_Remote_Work | Physical_Activity | Sleep_Quality | Region | Stress_Level_Numeric | Mental_Health_Access | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | EMP0001 | 32 | Non-binary | HR | Healthcare | 13 | Hybrid | 47 | 7 | 2 | ... | No | Decrease | 1 | Unsatisfied | 1 | Weekly | Good | Europe | 2 | 0 |
1 | EMP0002 | 40 | Female | Data Scientist | IT | 3 | Remote | 52 | 4 | 1 | ... | No | Increase | 3 | Satisfied | 2 | Weekly | Good | Asia | 2 | 0 |
2 | EMP0003 | 59 | Non-binary | Software Engineer | Education | 22 | Hybrid | 46 | 11 | 5 | ... | No | No Change | 4 | Unsatisfied | 5 | No Activity | Poor | North America | 2 | 0 |
3 | EMP0004 | 27 | Male | Software Engineer | Finance | 20 | Onsite | 32 | 8 | 4 | ... | Yes | Increase | 3 | Unsatisfied | 3 | No Activity | Poor | Europe | 3 | 1 |
4 | EMP0005 | 49 | Male | Sales | Consulting | 32 | Onsite | 35 | 12 | 2 | ... | Yes | Decrease | 3 | Unsatisfied | 3 | Weekly | Average | North America | 3 | 1 |
5 rows × 22 columns
Sutvarkius duomenis ir sukūrus vientisą bei tvarkingą lentelę, dabar turime galimybę analizuoti kiekvieną iškeltos hipotezės punkto aspektą. Toliau pereisime prie išsamios analizės, nagrinėdami kiekvieną hipotezės punktą iš eilės.
1. Kaip nuotolinis darbas veikia darbuotojų streso lygį?
Šioje analizėje bus tiriama, ar darbuotojai, dirbantys nuotoliniu būdu, patiria didesnį streso lygį nei dirbantys vietoje ar hibridiniu būdu. Analizės metu bus naudojami duomenys iš paruoštos lentelės.
- Grupavimas pagal darbo vietą.
Duomenys yra suskirstomi pagal darbo vietą, siekiant apskaičiuoti vidutinį streso lygį kiekvienoje grupėje
cleaned_df = pd.read_csv('C:/Users/myamo/OneDrive/Desktop/naujas_remote_work_mental_health.csv')
work_locations = cleaned_df['Work_Location'].unique()
average_stress_levels = []
for location in work_locations:
avg_stress = cleaned_df[cleaned_df['Work_Location'] == location]['Stress_Level_Numeric'].mean()
average_stress_levels.append((location, avg_stress))
stress_analysis = pd.DataFrame(average_stress_levels, columns=['Work_Location', 'Vidutinis_Streso_Lygis'])
print(stress_analysis)
Work_Location Vidutinis_Streso_Lygis 0 Hybrid 2.010916 1 Remote 2.025088 2 Onsite 1.987783
- Streso lygio vizualizacija pagal darbo vietą.
Siekiant pavaizduoti skirtumus tarp darbo vietų, buvo sudaryta linijinė diagrama
sns.set(style="whitegrid")
plt.figure(figsize=(5, 2))
sns.lineplot(data=stress_analysis, x='Work_Location', y='Vidutinis_Streso_Lygis', marker='o')
plt.title('Vidutinis streso lygis pagal darbo vietą')
plt.xlabel('')
plt.ylabel('Streso rodiklis')
plt.xticks(rotation=45)
plt.grid()
plt.show()
- Streso lygio pasiskirstymas.
Pateikiamas kiekvienos streso lygio kategorijos pasiskirstymas pagal darbo vietą
stress_distribution = df.groupby(['Work_Location', 'Stress_Level']).size().unstack().fillna(0)
df = pd.read_csv('C:/Users/myamo/OneDrive/Desktop/naujas_remote_work_mental_health.csv')
work_locations = df['Work_Location'].unique()
stress_levels = df['Stress_Level'].unique()
stress_distribution = []
for location in work_locations:
stress_count = []
for level in stress_levels:
count = df[(df['Work_Location'] == location) & (df['Stress_Level'] == level)].shape[0]
stress_count.append(count)
stress_distribution.append([location] + stress_count)
stress_distribution_df = pd.DataFrame(stress_distribution, columns=['Work_Location'] + list(stress_levels))
stress_distribution_df.set_index('Work_Location', inplace=True)
print(stress_distribution_df)
print(stress_distribution)
Medium High Low Work_Location Hybrid 545 561 543 Remote 577 590 547 Onsite 547 535 555 [['Hybrid', 545, 561, 543], ['Remote', 577, 590, 547], ['Onsite', 547, 535, 555]]
- Streso lygio pasiskirstymas.
Pateikiamas skirtingos streso lygio kategorijų pasiskirstymas tarp darbuotojų.
numerical_columns = ['Stress_Level_Numeric', 'Work_Life_Balance_Rating', 'Social_Isolation_Rating']
correlation_matrix = df[numerical_columns].corr()
plt.figure(figsize=(4, 1))
sns.heatmap(correlation_matrix, annot=True, cmap="coolwarm")
plt.title("Koreliacija tarp streso lygio ir kitų veiksnių")
plt.show()
- Streso lygio ir psichinės sveikatos išteklių prieinamumo pagal darbo vietą analizė.
Įvertinamas streso lygis pagal darbo vietą, atsižvelgiant į psichinės sveikatos išteklių prieinamumą
stress_support_analysis = df.groupby(['Work_Location', 'Access_to_Mental_Health_Resources_Yes'])['Stress_Level_Numeric'].mean().unstack()
print(stress_support_analysis)
Access_to_Mental_Health_Resources_Yes False True Work_Location Hybrid 1.984468 2.038177 Onsite 1.953659 2.022032 Remote 1.997768 2.055012
Išvada N1:
Analizės rezultatai parodė, kad darbuotojai, dirbantys nuotoliniu būdu, patiria didesnį streso lygį nei tie, kurie dirba vietoje arba hibridiniu būdu.
Pirmoji hipotezė pasitvirtino.
2. Kaip nuotolinis darbas veikia socialinės izoliacijos jausmą ir kokią įtaką tai daro darbuotojų pasitenkinimui darbu?
- Suformuojamas duomenų rinkinys
combined_analysis = analysis_df[['Work_Location', 'Social_Isolation_Rating', 'Satisfaction_with_Remote_Work']]
print(combined_analysis.head())
Work_Location Social_Isolation_Rating Satisfaction_with_Remote_Work 0 Hybrid 1 Unsatisfied 1 Remote 3 Satisfied 2 Hybrid 4 Unsatisfied 3 Onsite 3 Unsatisfied 4 Onsite 3 Unsatisfied
- Bendras pasitenkinimo ir socialinės izoliacijos analizė
overall_satisfaction_analysis = combined_analysis.groupby('Satisfaction_with_Remote_Work').agg({
'Social_Isolation_Rating': 'mean',
'Work_Location': 'count'
}).rename(columns={'Work_Location': 'Employee_Count'}).reset_index()
print(overall_satisfaction_analysis)
Satisfaction_with_Remote_Work Social_Isolation_Rating Employee_Count 0 Neutral 3.044903 1648 1 Satisfied 2.968955 1675 2 Unsatisfied 2.968396 1677
Išvada N2:
Socialinės izoliacijos reitingai skiriasi pagal pasitenkinimo nuotoliniu darbu lygius. Darbuotojų pasitenkinimas ir socialinė izoliacija yra tarpusavyje susiję, todėl organizacijos turėtų atkreipti dėmesį į šiuos veiksnius, siekdamos gerinti darbuotojų gerovę. Tokiu būdu, hipotezė, kad nuotolinis darbas veikia socialinės izoliacijos jausmą ir darbuotojų pasitenkinimą, gavo patvirtinimą.
3. Ar nuotolinis darbas dažniau susijęs su nerimu ar depresija nei hibridinis ar vietinis darbas?
Įkėlus duomenis ir gauname unikalias psichinės sveikatos būkles
data = pd.read_csv('C:\\Users\\myamo\\OneDrive\\Desktop\\naujas_remote_work_mental_health.csv')
unique_conditions = data['Mental_Health_Condition'].unique()
print(unique_conditions)
['Depression' 'Anxiety' 'Unknown' 'Burnout']
Suskaičiuojame psichinės sveikatos sutrikimų pasiskirstymą pagal darbo vietą
def calculate_mental_health_distribution(df, location_col, condition_col):
work_locations = df[location_col].unique()
mental_health_conditions = df[condition_col].unique()
mh_combination_count = []
for location in work_locations:
for condition in mental_health_conditions:
count = df[(df[location_col] == location) & (df[condition_col] == condition)].shape[0]
mh_combination_count.append((location, condition, count))
return pd.DataFrame(mh_combination_count, columns=[location_col, condition_col, 'Count'])
# Naudoti funkciją
mental_health_distribution_df = calculate_mental_health_distribution(df, 'Work_Location', 'Mental_Health_Condition')
print(mental_health_distribution_df)
Work_Location Mental_Health_Condition Count 0 Hybrid Depression 421 1 Hybrid Anxiety 428 2 Hybrid Unknown 400 3 Hybrid Burnout 400 4 Remote Depression 413 5 Remote Anxiety 443 6 Remote Unknown 420 7 Remote Burnout 438 8 Onsite Depression 412 9 Onsite Anxiety 407 10 Onsite Unknown 376 11 Onsite Burnout 442
Pateikiame vizualizaciją, kuri rodo psichinės sveikatos sutrikimų procentinę dalį pagal darbo vietą
plt.figure(figsize=(10, 6))
for condition in mental_health_percentage.columns:
plt.plot(mental_health_percentage.index, mental_health_percentage[condition], marker='o', label=condition)
plt.title('Psichinės sveikatos sutrikimų procentas pagal darbo vietą')
plt.xlabel('')
plt.ylabel('%')
plt.xticks(rotation=0)
plt.legend(title='Psichinės sveikatos sutrikimas')
plt.show()
Išvada N3:
Iš gautų rezultatų matyti, kad nuotoliniu būdu dirbantys darbuotojai patiria panašius psichinės sveikatos sutrikimus kaip ir hibridiniai bei vietiniai darbuotojai. Nors nuotolinis darbas gali turėti įtakos psichinei būklei, skirtumai tarp darbo modelių nebuvo pakankamai reikšmingi, todėl hipotezė, kad dirbant nuotoliniu būdu dažniau pasireiškia tokie sutrikimai kaip nerimas ar depresija, nepasitvirtino.
Taip pat pastebima, kad dirbantys vietoje (onsite) patiria didžiausią išsekimą.4. Ar darbo sąlygos (nuotolinis, hibridinis, vietinis) turi įtakos darbuotojų pasitenkinimo lygiui?
- Apskaičiuojami pasitenkinimo procentai pagal darbo vietą.
satisfaction_summary = satisfaction_data.groupby('Work_Location')['Satisfaction_with_Remote_Work'].value_counts(normalize=True).unstack()
from IPython.display import display, HTML
display(HTML(satisfaction_summary.to_html()))
Satisfaction_with_Remote_Work | Neutral | Satisfied | Unsatisfied |
---|---|---|---|
Work_Location | |||
Hybrid | 0.326865 | 0.342025 | 0.331110 |
Onsite | 0.309102 | 0.361637 | 0.329261 |
Remote | 0.351809 | 0.302800 | 0.345391 |
- Atliktas Chi-kvadrato testas, siekiant įvertinti pasitenkinimo skirtumus tarp skirtingų darbo sąlygų.
chi2, p, dof, expected = chi2_contingency(contingency_table)
print(f"Chi-kvadrato testas: p-vertė = {p}")
Chi-kvadrato testas: p-vertė = 0.9999907578823934
Chi-kvadrato testas parodė didelę p-vertę (0.9999), todėl galime teigti, kad statistiškai reikšmingo skirtumo tarp pasitenkinimo lygių įvairiose darbo sąlygose nėra.
- Pasitenkinimas darbu pagal darbo vietą, atvaizduotas stulpelinėje diagramoje.
satisfaction_summary.plot(kind='bar', figsize=(12, 6), position=0, width=0.8)
plt.title('Pasitenkinimas darbu pagal darbo vietą')
plt.xlabel('')
plt.ylabel('%')
plt.xticks(rotation=0)
plt.legend(title='Pasitenkinimo lygis', bbox_to_anchor=(1.05, 1), loc='upper left')
plt.tight_layout()
plt.show()
Išvada N4:
Apibendrinant, darbo sąlygos turi įtakos darbuotojų pasitenkinimo lygiui, tačiau skirtumai tarp modelių nėra dideli. Onsite darbo modelis pasižymi didesniu patenkintų darbuotojų procentu, o nuotolinis darbas rodo didesnį neutralumą. Hipotezė, kad darbo sąlygos (nuotolinis, hibridinis, vietinis) turi įtakos darbuotojų pasitenkinimo lygiui nepasitvirtino.
5. Ar prieiga prie psichinės sveikatos pagalbos paslaugų sumažina nuotoliniu būdu dirbančių darbuotojų psichinės sveikatos sutrikimų, tokių kaip nerimas, depresija ar perdegimas, dažnį?
Filtruojami duomenys, kad būtų gauta tik nuotoliniu būdu dirbančių darbuotojų psichinės sveikatos būklė ir prieiga prie psichinės sveikatos išteklių
remote_data = data[data['Work_Location'] == 'Remote']
mental_health_data = remote_data[['Mental_Health_Condition', 'Access_to_Mental_Health_Resources']]
mental_health_data.head()
Mental_Health_Condition | Access_to_Mental_Health_Resources | |
---|---|---|
1 | Anxiety | No |
6 | Anxiety | Yes |
10 | Unknown | Yes |
12 | Depression | Yes |
14 | Anxiety | Yes |
Sukurta lentelė, kurioje matoma psichinės sveikatos būklės pasiskirstymas pagal prieigą prie psichinės sveikatos išteklių
import pandas as pd
mental_health_data = pd.read_csv(r'C:\Users\myamo\OneDrive\Desktop\naujas_remote_work_mental_health.csv')
summary_data = mental_health_data.groupby(['Access_to_Mental_Health_Resources', 'Mental_Health_Condition']).size().unstack(fill_value=0)
percentage_summary = summary_data.div(summary_data.sum(axis=1), axis=0) * 100
print(percentage_summary)
Mental_Health_Condition Anxiety Burnout Depression Unknown Access_to_Mental_Health_Resources No 25.303564 26.047787 24.050137 24.598512 Yes 25.827544 25.132816 25.827544 23.212096
Išvada N5:
Nors prieiga prie psichinės sveikatos išteklių gali turėti tam tikrą teigiamą poveikį, vis dėlto ji nevisiškai sumažina psichinės sveikatos sutrikimų dažnį tarp nuotoliniu būdu dirbančių asmenų. Todėl hipotezė, kad nuotolinis darbas dažniau susijęs su nerimu ar depresija, nepasitvirtino.
Galutinė išvada:
Apibendrinant analizę, nuotolinis darbas turi įtakos darbuotojų streso lygiui ir socialinei izoliacijai, tačiau psichinės sveikatos sutrikimai, tokie kaip nerimas ir depresija, nebuvo dažnesni nei kitose darbo sąlygose. Nors nuotolinis darbas nepadidino psichinių sveikatos problemų, pastebėta, kad dirbantieji vietoje patyrė didžiausią perdegimo lygį. Prieiga prie psichinės sveikatos pagalbos paslaugų nevisiškai sumažino psichinės sveikatos sutrikimų dažnį tarp nuotoliniu būdu dirbančių darbuotojų. Pagrindinė hipotezė, kad nuotolinis darbas turi neigiamą poveikį darbuotojų streso lygiui ir psichinei sveikatai nepasitvirtino.